#ifndef pkt_queue_h
#define pkt_queue_h

#include <stdbool.h>
#include <sys/queue.h>
#include <el.h>
#include "ll.h"

#define PKT_QUEUE_MAX 8

struct queue_stat {
  int arp;
  int arp_req;
  int arp_reply;
  int ip;
  int ipv6;
  int icmp;
  int icmp_req;
  int icmp_reply;
};

static inline bool valid_pkt_queue_id(int id)
{
  return id >= 0 && id < PKT_QUEUE_MAX;
}

struct queue_stat *get_queue_stat(int id);

bool pkt_queue_push(int id, struct llbuf *ll);
struct llbuf *pkt_queue_pop(int id);
bool pkt_queue_create(int id);
bool pkt_queue_destroy(int id);

bool pkt_event_send(int id, struct llbuf *ll);
struct llbuf * pkt_event_recv(int id);
bool pkt_queue_bind(int id, struct el_events *events, void *userdata);
bool pkt_queue_unbind(int id);

void pkt_queue_init(void);
void pkt_queue_deinit(void);

#endif

